package com.xingchi.tornado.mybatisplus.service;

import com.xingchi.tornado.model.BaseDTO;
import com.xingchi.tornado.model.PageResult;
import com.xingchi.tornado.model.PaginationQuery;

import java.util.Collection;
import java.util.List;

/**
 * 基础查询相关接口
 *
 * @author xingchi
 * @date 2024/3/2 19:09
 */
public interface BaseQueryService<T extends BaseDTO, Q extends PaginationQuery> extends BaseService<T> {

    /**
     * 查询总条数
     *
     * @param query 查询对象
     * @return 结果数
     */
    Long count(Q query);

    /**
     * 根据query查询
     *
     * @param query 查询对象
     * @return 最终对象
     */
    List<T> selectByQuery(Q query);

    /**
     * 根据query查询
     *
     * @param query 查询对象
     * @return 最终对象
     */
    PageResult<T> selectPageByQuery(Q query);

    /**
     * 根据query查询一条记录，如果查询到多条会进行limit
     *
     * @param query 查询对象
     * @return 查询结果
     */
    T selectOne(Q query);

    /**
     * 根据查询条件查询对应的id
     *
     * @param query 查询条件
     * @return id集合
     */
    List<Long> selectIds(Q query);

    /**
     * 根据id集合进行查询
     *
     * @param ids id集合
     * @return 查询结果
     */
    List<T> selectByIds(Collection<Long> ids);

    /**
     * 根据id判断实体是否存在
     *
     * @param id 实体id
     * @return 是否存在
     */
    boolean exists(Long id);

    /**
     * 是否存在
     *
     * @param query 查询对象
     * @return 查询结果
     */
    boolean exists(Q query);

}
